package com.b1.taskmanagerserver.parser;

import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.File;
import org.jdom2.output.Format;

/*
 * Класс для чтения и записи в contact.xml
 * 
 */
public class ContactXml 
{
    private String[][] contactArray;        //массив контактов
    private File file=new File("contact.xml"); // файл для чтения и записи
    
    /**
     * метод получения массива контактов
     * @return 
     */
    public String[][] getContactArray() 
    {
        return contactArray;
    }
    /*
     * Конструктор
     * инициализирует массив размерности = количеству записей и заполняет его
     */
    public ContactXml() throws IOException, org.xml.sax.SAXException, ParserConfigurationException 
    {
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        javax.xml.parsers.DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.parse(file);
        document.getDocumentElement().normalize();
        NodeList nodeList = document.getElementsByTagName(document.getDocumentElement().getChildNodes().item(1).getNodeName());
        contactArray = new String [nodeList.getLength()][4];
        readXml(nodeList);
    }
    /**
     * метод чтения контакт листа из xml
     * @param nodeList 
     */
    private void readXml(NodeList nodeList) 
    {        
        for(int i = 0; i < nodeList.getLength(); i++)
            {                
                Node node = nodeList.item(i);
                if(node.getNodeType() == Node.ELEMENT_NODE)
                {
                    org.w3c.dom.Element element = (org.w3c.dom.Element)node;
                    contactArray[i][0] = node.getAttributes().item(0).getTextContent();
                    contactArray[i][1] = element.getElementsByTagName("firstname").item(0).getChildNodes().item(0).getNodeValue();
                    contactArray[i][2] = element.getElementsByTagName("lastname").item(0).getChildNodes().item(0).getNodeValue();
                    contactArray[i][3] = element.getElementsByTagName("phone").item(0).getChildNodes().item(0).getNodeValue();   
                }
            }
    }
    /**
     * Процедура записи контакт листа в xml
     */
    public void writeXml(String contactArray[][]) throws IOException
    {
        Element rootElement = new Element("contactlist");
        Element contactElement[] = new Element[contactArray.length];
        Element childElement;
        for (int i = 0; i < contactArray.length; i++) 
        {
            contactElement[i] = new Element("contact");
            contactElement[i].setAttribute("id", contactArray[i][0]);
            childElement = new Element("firstname");
            if ((contactArray[i][1]==null)||(contactArray[i][1].equals(""))) childElement.addContent("null");
            else childElement.addContent(contactArray[i][1]);
            contactElement[i].addContent(childElement);
            
            childElement = new Element("lastname");
            if ((contactArray[i][2]==null)||(contactArray[i][2].equals(""))) childElement.addContent("null");
            else childElement.addContent(contactArray[i][2]);
            contactElement[i].addContent(childElement);
            
            childElement = new Element("phone");
            if ((contactArray[i][3]==null)||(contactArray[i][3].equals(""))) childElement.addContent("null");
            else childElement.addContent(contactArray[i][3]);
            contactElement[i].addContent(childElement);
        }
        for (int i = 0; i < contactArray.length; i++) 
        {
            rootElement.addContent(contactElement[i]);
        }

        Format fmt = Format.getPrettyFormat();
        XMLOutputter outputter = new XMLOutputter(fmt);
        outputter.output(new org.jdom2.Document(rootElement), new FileOutputStream (file));
    }
}
